/**
* Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
package org.python.pydev.ui.wizards.files;
import java.io.ByteArrayInputStream;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.text.Region;
import org.eclipse.jface.text.templates.Template;
import org.eclipse.jface.text.templates.TemplateProposal;
import org.eclipse.jface.text.templates.persistence.TemplatePersistenceData;
import org.eclipse.ui.IEditorPart;
import org.python.pydev.core.log.Log;
import org.python.pydev.editor.PyEdit;
import org.python.pydev.editor.codecompletion.templates.PyDocumentTemplateContext;
import org.python.pydev.editor.codecompletion.templates.PyTemplateCompletionProcessor;
import org.python.pydev.editor.templates.PyContextType;
import org.python.pydev.ui.filetypes.FileTypesPreferencesPage;
/**
* Python module creation wizard
*
* TODO: Create initial file content from a comment templates
*
* @author Mikko Ohtamaa
*
*/
public class PythonModuleWizard extends AbstractPythonWizard {
public PythonModuleWizard() {
super("Create a new Python module");
}
public static final String WIZARD_ID = "org.python.pydev.ui.wizards.files.PythonModuleWizard";
@Override
protected AbstractPythonWizardPage createPathPage() {
return new AbstractPythonWizardPage(this.description, selection) {
@Override
protected boolean shouldCreatePackageSelect() {
return true;
}
};
}
/**
* We will create a new module (file) here given the source folder and the package specified (which
* are currently validated in the page)
* @param monitor
* @throws CoreException
*/
@Override
protected IFile doCreateNew(IProgressMonitor monitor) throws CoreException {
IContainer validatedSourceFolder = filePage.getValidatedSourceFolder();
if (validatedSourceFolder == null) {
return null;
}
IContainer validatedPackage = filePage.getValidatedPackage();
if (validatedPackage == null) {
String packageText = filePage.getPackageText();
if (packageText == null) {
Log.log("Package text not available");
return null;
}
IFile packageInit = PythonPackageWizard.createPackage(monitor, validatedSourceFolder, packageText);
if (packageInit == null) {
Log.log("Package not created");
return null;
}
validatedPackage = packageInit.getParent();
}
String validatedName = filePage.getValidatedName() + FileTypesPreferencesPage.getDefaultDottedPythonExtension();
IFile file = validatedPackage.getFile(new Path(validatedName));
if (!file.exists()) {
file.create(new ByteArrayInputStream(new byte[0]), true, monitor);
}
return file;
}
/**
* Applies the template if one was specified.
*/
@Override
protected void afterEditorCreated(IEditorPart openEditor) {
if (!(openEditor instanceof PyEdit)) {
return; //only works for PyEdit...
}
TemplatePersistenceData selectedTemplate = filePage.getSelectedTemplate();
if (selectedTemplate == null) {
return; //no template selected, nothing to apply!
}
Template template = selectedTemplate.getTemplate();
PyEdit pyEdit = (PyEdit) openEditor;
Region region = new Region(0, 0);
PyDocumentTemplateContext context = PyTemplateCompletionProcessor.createContext(new PyContextType(),
pyEdit.getPySourceViewer(), region);
TemplateProposal templateProposal = new TemplateProposal(template, context, region, null);
templateProposal.apply(pyEdit.getPySourceViewer(), '\n', 0, 0);
}
}